---@class GT.area 区域
---@field area Area
GT.area = class()

---@class area_data
---@field area Area

function GT.area:ctor(data)
    self.area = data.area
end

--- 获取区域内单位数量
---@return UInt32
function GT.area:get_unit_num_in_area()
    return game_api.get_unit_num_in_area(self.area)
end

--- 删除区域
function GT.area:remove_area()
    game_api.remove_area(self.area)
end

--- 获得区域天气
---@param area Area 区域
---@return UInt32
function GT.area:get_area_weather(area)
    return game_api.get_area_weather(self.area)
end

--- 设置区域天气
---@param weather_type UInt32 天气类型
function GT.area:update_area_weather(weather_type)
    game_api.update_area_weather(self.area, weather_type)
end

--- 设置区域碰撞
---@param is_add Bool 添加/去除
---@param ground_channel Bool 地面碰撞
---@param air_channel Bool 飞行碰撞
function GT.area:set_area_collision(is_add,ground_channel,air_channel)
    game_api.set_area_collision(self.area,is_add,ground_channel,air_channel)
end

--- 给区域添加tag
---@param tag Str tag
function GT.area:add_area_tag(tag)
    game_api.add_area_tag(self.area,tag)
end

--- 给区域移除tag
---@param tag Str tag
function GT.area:remove_area_tag(tag)
    game_api.add_area_tag(self.area,tag)
end

--- 判断点是否在区域内
---@param point FVector3 点
---@return Bool
function GT.area:judge_point_in_area(point)
    game_api.judge_point_in_area(point,self.area)
end

--- 替换区域中的指定地形纹理
---@param texture_type Int32 纹理类型
---@param new_texture_type Int32 新纹理类型
function GT.area:replace_point_texture(texture_type,new_texture_type)
    game_api.replace_point_texture(self.area,texture_type,new_texture_type)
end


--- 获取区域内玩家所有单位id列表
---@param role Role 玩家
---@return GT.unitGroup
function GT.area:get_unit_group_belong_to_player_in_area(role)
    ---@type unitGroup_data
    local data={
          unitGroup=game_api.get_unit_group_belong_to_player_in_area(self.area,role)
    }
    return new(GT.unitGroup, data)

end


--- 得到区域内的单位id列表
---@return List
function GT.area:get_unit_group_in_area()
    return game_api.get_unit_group_in_area(self.area)
end



--- 得到区域内的物品对象id列表
---@return List
function GT.area:get_item_group_in_area()
    return game_api.get_item_group_in_area(self.area)
end


--- 获取区域内的可破坏物列表
---@return List
function GT.area:get_all_dest_in_area()

    return game_api.get_all_dest_in_area(self.area)
end